async function convertToViberMessage()

in viber/server.js [93:194]


async function convertToViberMessage(responses) {
  const replies = [];
  if (Array.isArray(responses)) {
    const filteredResponses = await filterResponses.filterResponses(responses, 'VIBER');
    await filteredResponses.forEach(async (response)=> {
      let reply = null;
      switch (response.message) {
        case 'text': {
          if (response.text.text[0] !== '') {
            reply = new TextMessage(response.text.text[0]);
          }
        }
          break;

        case 'image': {
          reply = new PictureMessage(response.image.imageUri);
        }
          break;

        case 'card': {
          const buttons = response.card.buttons;
          let viberButtons = [];
          let keyboard = null;
          if (Array.isArray(buttons) && buttons.length > 0) {
            buttons.forEach((button) => {
              if (button.postback.startsWith('http')) {
                viberButtons.push({
                  ActionType: 'open-url',
                  Text: button.text,
                  ActionBody: button.postback
                });
              } else {
                viberButtons.push({
                  ActionType: 'reply',
                  ActionBody: button.postback,
                  Text: button.text,
                });
              }
            });
            keyboard = {
              Type: "keyboard",
              DefaultHeight: true,
              Buttons: viberButtons
            };
          }
          let msgText = '';
          if (response.card.title) {
            msgText = response.card.title;
          }
          if (response.card.subtitle) {
            msgText += ("\n" + response.card.subtitle);
          }
          if (response.card.imageUri) {
            reply = new PictureMessage(response.card.imageUri, msgText, null,
                keyboard);
          } else if (msgText !== '') {
            reply = new TextMessage(msgText, keyboard);
          }
        }
          break;

        case 'quickReplies': {
          const replies = response.quickReplies.quickReplies;
          const title = response.quickReplies.title
              ? response.quickReplies.title : 'Choose an item';
          if (Array.isArray(replies) && replies.length > 0) {
            let keyboard = {
              Type: "keyboard",
              DefaultHeight: true,
              Buttons: []
            };
            replies.forEach((reply) => {
              keyboard.Buttons.push({
                ActionType: 'reply',
                ActionBody: reply,
                Text: reply,
                TextSize: 'regular'
              });
            });
            reply = new TextMessage(title, keyboard);
          }
        }
          break;

        case 'payload': {
          let payload = response.payload.fields.viber.structValue;
          payload = await protoToJson.structProtoToJson(payload);
          reply = bot._messageFactory.createMessageFromJson({message: payload});
          if (payload.keyboard) {
            reply.keyboard = payload.keyboard;
          }
        }
          break;

        default:
          break;
      }
      replies.push(reply);
    });
  }
  return replies;
}