Как различить идентификатор бота и идентификатор пользователя в простом пользовательском интерфейсе веб-чата реагирования - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь настроить своего бота с помощью простого веб-чата от Microsoft Bot. Пример ссылки
Я новичок в Reach and Web Chat. Я хотел бы знать, как мы дифференцируем разговор. Будь то от бота или от пользователя. Потому что оба возвращаются одинаково activity.id.

Snapshot of Bot Conversation

Я добавил этот код для тестирования.
content={activity.text + ' Testing ' + activity.id}

Вот полный фрагмент кода

{activities
          // Currently, this sample only displays an activity of type "message"
          .filter(({ type }) => type === 'message')
          // We need to hide "postBack" message sent by the user
          .filter(({ channelData: { postBack } = {}, from: { role } }) => !(role === 'user' && postBack))
          // Normalize the activity:
          // - Every activity should have an "attachments" array, consisting of zero or more attachments:
          // - If this is a "messageBack" message, we should use the "displayText",
          //   because "text" is being submitted to bot, and "displayText" is what we use to override what the bot displays to the user.
          .map(activity => ({
            ...activity,
            attachments: activity.attachments || [],
            text: getValueOrUndefined(activity, 'channelData', 'messageBack', 'displayText') || activity.text
          }))
          // Filter out all empty messages (no attachments or text)
          .filter(({ attachments, text }) => attachments.length || text)
          .map((activity, index) => (
            <React.Fragment key={activity.id || index}>
              <li className="Sender">
                {!!activity.text && (
                  // We are using the very same component for text message and attachments.
                  // This is because, attachments can also have "text/markdown" or "text/plain" content.
                  // In this case, we prefer to have a single component for both of them.
                  <Attachment
                    content={activity.text + ' Testing ' + activity.id}
                    contentType={activity.textFormat === 'markdown' ? 'text/markdown' : 'text/plain'}
                  />
                )}
                {!!activity.attachments.length && (
                  <ul>
                    {activity.attachments.map((attachment, index) => (
                      <li key={index} className="Send">
                        <Attachment {...attachment} />
                      </li>
                    ))}
                  </ul>
                )}
              </li>
            </React.Fragment>
          ))}

Пожалуйста, дайте мне знать, как мне это исправить.

1 Ответ

1 голос
/ 05 февраля 2020

Любое действие, отправленное пользователем, будет иметь свойства from => role со значением user. Если не от пользователя, то значение role удаляется вместе со значением from => name, содержащим имя вашего бота.

Имейте в виду, что любое из этих значений может будет перезаписано в зависимости от канала, который вы используете (например, FB, Slack, Web Chat и т. Д. c.). Обычно это не так, поскольку большинство метаданных добавляется к свойству channelData, но что-то нужно знать.

Для справки, вы можете просмотреть все возможные свойства действия здесь , поскольку они относятся к BotFramework.

enter image description here

Надежда на помощь

...