Search code examples
pythonbotframeworkchatbotbot-framework-composer

BotFramework Composer, getting 404 error on callback at the skill


Steps To Reproduce:

Step 1:

Create a bot using composer(v1.0.0 installed form DMG on mac), choosing Echo Bot template.

Step 2:

Clone echo skill sample from the current repo: https://github.com/microsoft/BotBuilder-Samples/tree/master/samples/python/80.skills-simple-bot-to-bot

Step 3:

Run the skill locally.

Step 4:

Connect to skill:

enter image description here

The endpoint in the picture is with port 3980 but it sue to at the last attempts the main bot was served by the composer on current bot. The point is that I set the callback URL to be the URL on which the main bot is running.

Step 5:

Add skill to Unknown Intent Dialog, After the echo response: enter image description here

The Error:

I relieve an error at the skill side. After debugging of the skill I found that the problem is at the callback which returns 404 error back to the skill on sending activity.

uring handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/victorvasiliev/PycharmProjects/BotBuilder-Samples/samples/python/80.skills-simple-bot-to-bot/echo-skill-bot/adapter_with_error_handler.py", line 71, in _send_eoc_to_parent
    await turn_context.send_activity(end_of_conversation)
  File "/usr/local/lib/python3.7/site-packages/botbuilder/core/turn_context.py", line 170, in send_activity
    result = await self.send_activities([activity_or_text])
  File "/usr/local/lib/python3.7/site-packages/botbuilder/core/turn_context.py", line 217, in send_activities
    return await self._emit(self._on_send_activities, output, logic())
  File "/usr/local/lib/python3.7/site-packages/botbuilder/core/turn_context.py", line 295, in _emit
    return await logic
  File "/usr/local/lib/python3.7/site-packages/botbuilder/core/turn_context.py", line 212, in logic
    responses = await self.adapter.send_activities(self, output)
  File "/usr/local/lib/python3.7/site-packages/botbuilder/core/bot_framework_adapter.py", line 686, in send_activities
    raise error
  File "/usr/local/lib/python3.7/site-packages/botbuilder/core/bot_framework_adapter.py", line 672, in send_activities
    activity.conversation.id, activity.reply_to_id, activity
  File "/usr/local/lib/python3.7/site-packages/botframework/connector/aio/operations_async/_conversations_operations_async.py", line 533, in reply_to_activity
    raise models.ErrorResponseException(self._deserialize, response)
botbuilder.schema._models_py3.ErrorResponseException: Operation returned an invalid status code 'Not Found'

Did anybody faced the same issue?


Solution

  • You can see in the documentation that your skill host endpoint needs to end with api/skills and not just api:

    Select Skills from the Composer menu. In the Skills page, if your skill is remote, enter <ngrok address>/api/skills in the Skill Host Endpoint field. If your skill is local, you should enter localhost:port/api/skills in the Skill Host Endpoint field.

    The skill host endpoint is used as the service URL in activities sent to the skill, which means it will be the base URI for any Conversations API methods the skill calls. If your skill tries to send requests to a non-existent URL then you should expect to get 404's. The Composer bot will be routing requests to routes starting with api/skills so that's what you should be putting in your service URL.