sendMessage method

Future sendMessage(
  1. Map<String, dynamic> messageOptions,
  2. String channelSid,
  3. TwilioConversationsClient? _chatClient
)

Implementation

Future<dynamic> sendMessage(
    Map<String, dynamic> messageOptions,
    String channelSid,
    TwilioWebClient.TwilioConversationsClient? _chatClient) async {
  try {
    final channel = await promiseToFuture<TwilioConversationsChannel>(
        _chatClient!.getConversationBySid(channelSid));

    final messagePreparator = await channel.prepareMessage();

    if ((messageOptions["body"]) != null) {
      messagePreparator.setBody(messageOptions["body"]);
    } else {
      messagePreparator.setBody('');
    }

    if (messageOptions["attributes"] != null) {
      messagePreparator.setAttributes(jsify(messageOptions["attributes"]));
    }

    if (messageOptions["input"] != null &&
        (messageOptions["mimeType"] as String?) != null) {
      final input = messageOptions["input"] as String;
      final mimeType = messageOptions["mimeType"] as String?;

      final media = FormData.fromMap({
        'contentType': mimeType,
        'filename': DateTime.now().toIso8601String(),
        'media': await MultipartFile.fromFile(input, filename: 'upload.txt'),
      });

      messagePreparator.addMedia(media);
    }
    final index = await promiseToFuture<int>(
      messagePreparator.build().send(),
    );

    final messages =
        await promiseToFuture<JSPaginator<TwilioConversationsMessage>>(
      channel.getMessages(1, index, "forward"),
    );

    if (messages.items.length == 0) {
      return null;
    }
    return Mapper.messageToMap(messages.items[0]);
  } catch (e) {
    Logging.debug('error: sendMessage ${e}');
    return null;
  }
}