MS Bot, API прямой линии, не может отправить активность, как это исправить?

Я пытался настроить MS Bot в приложении. До сих пор я делал следующее.

  1. установить конечную точку REST для бота, этот коннектор будет ее слушать.

     app.post("/botapi/messages", connector);
    
  2. получить APP_ID и APP_PASSWORD, эмулятор успешно подключен к следующему,

     http://localhost:4000/botapi/messages
     APP_ID
     APP_PASSWORD
    

    - это успешно, - ответил бот, как и ожидалось.

  3. Пытался поговорить с ботом с помощью Direct Line API. Успешно начали разговоры. Один из ответов следующий.

     {
       "conversationId": "3JYZyAn5VYB3HNcO3tcgtn",
       token: ....
        .....
      }
    

    Как сказано в документации, я использовал пакеты "node-fetch" для отправки запроса POST.

Однако я не могу отправить активность с помощью Direct Line API, получил

    internal server error 500

В документации сказано, что запрос POST должен быть таким, как показано ниже.

    POST 
    https://directline.botframework.com/v3/directline/conversations
    Authorization: Bearer my_secret

Это отлично сработало для начала разговора, но не для отправки действий.

Я отправил следующее:

      {
       "type": "message",
       "from": {
              "id": "user1"
               },
            "text": "hello Bot, say something"
       }

Я не думаю, что id - это что-то важное, поэтому я написал это в

          https://directline.botframework.com/v3/directline/conversations/{conversationId}/activities

Я использовал идентификатор разговора, полученный при начале разговора. Я погуглил, но не нашел ответа на свою проблему. К тому же у меня мало вопросов, может быть, их ответы мне помогут.

Q1: URL "https://directline.botframework.com/v3/directline/ "одинаково для всех, кто использует Direct Line API? Когда я заменяю его конечной точкой бота, "http://localhost:3000/botapi/messages/conversations ", даже разговоры завести не могу, ничего не работает.

Q2: Как работает Direct Line API? Я отправляю POST свой секрет API, как тогда API находит моего бота? Как взаимодействуют бот и API? я что-то упускаю?

Q3: Когда я отправляю запрос POST для отправки действия, я следовал документации. В авторизации я попробовал и свой секрет, и токен, который я получил от начала разговора, и то, и другое не сработало. Я считаю, что оба должны работать. я ошибся?

Вопрос 4. Нужно ли мне что-то делать с Служба коннектора ботов? Я прочитал статью, но не знаю, для чего она нужна. я ошибся?

Итак, что мне здесь не хватает? Как я могу отправить действия?

Примечание. Мой бот не развернут на azuri или aws, он есть только на моем Mac. Но у меня есть APP_ID, APP_PASSWORD и SECRET для DirectLine, как описано в документах.


person arslan    schedule 11.10.2017    source источник
comment
Вы видели github.com/Microsoft/BotBuilder-Samples/tree? / master / Node /? Кроме того, вы включали DirectLine в качестве канала для своего бота?   -  person Ezequiel Jadib    schedule 11.10.2017
comment
@EzequielJadib Да, я создал прямой канал в моем боте. Я также проверил этот пример сегодня утром. Я видел, что он использует swagger-client, но наше приложение уже использует node -fetch для запроса на выпуск, поэтому я использовал node-fetch. Остальная часть истории, как написано выше: может начинать разговоры, но не может отправлять активность :(   -  person arslan    schedule 11.10.2017
comment
Сначала я хотел бы посмотреть, сможете ли вы заставить образец, который я предоставил, работать против вашего бота; после этого я рассмотрю конкретные части (помимо того, какой клиент вы используете для отправки запроса), чтобы увидеть, есть ли какие-либо существенные различия.   -  person Ezequiel Jadib    schedule 11.10.2017
comment
@EzequielJadib API Direct Line просто выдает HTTP-запрос. Это то, что я сделал, используя node-fetch, и работал над началом разговоров. Но не вышло на отправку действий. Упомянутый вами образец даже не запускается, в нем есть ошибки, пытался исправить, но не смог.   -  person arslan    schedule 12.10.2017


Ответы (1)


документация указывает, что это конечная точка для отправки действия (сообщения) боту через прямую линию:

https://directline.botframework.com/v3/directline/conversations/{conversationId}/activities

В этом URI {conversationId} - это идентификатор диалога (значение conversationId), который вы получили в теле ответа, когда вы начал беседу. В теле запроса должна быть указана информация об отправляемом вами действии, например:

{
    "type": "message",
    "from": {
        "id": "user1"
    },
    "text": "hello"
}

Наконец, ответы на ваши вопросы:

  • Q1: базовый URI одинаков для всех запросов Direct Line API.

  • Q2: секрет или токен прямой линии, который вы указываете в заголовке Authorization запроса, используется для идентификации бота, которому должен быть направлен запрос.

  • Q3: да, вы должны иметь возможность указать секрет или значение token, которое вы получите в ответе Начать разговор в заголовке Authorization запроса Отправить действие. Однако обратите внимание, что токен, который вы получаете в ответе Начать разговор, можно использовать только для взаимодействия с этим конкретным разговором.

  • Q4: Статья, на которую вы ссылаетесь, не имеет прямого отношения к использованию Direct Line API. (Но, как упомянул @EzequielJadib в своем комментарии, вам необходимо включить канал Direct Line для вашего бота.)

person Kim Brandl    schedule 12.10.2017
comment
Спасибо за разъяснение. Оказалось, что то, что вы сказали, именно то, что сделал я. Но все же я могу начать разговор, но не могу отправить действие, используя токен, полученный в ответе на начало разговора. :( В чем тут возможная проблема, хм ... - person arslan; 12.10.2017
comment
Я не уверен, что вам сказать, поскольку описанная мною процедура должна работать. Для дальнейшего устранения неполадок (и получения помощи здесь по SO) вы можете рассмотреть возможность использования такого инструмента, как Fiddler (или чего-то подобного), для захвата запроса / ответа API, который вы отправляете и получаете как для Start Conversation и последующую операцию Отправить действие и обновите свой вопрос выше, указав эту информацию (разумеется, скрывая любую конфиденциальную информацию). - person Kim Brandl; 12.10.2017
comment
У меня бот локально реститирован, на Azuri Or Aws не разворачивал. Есть ли вероятность, что это причина? - person arslan; 17.10.2017