Okay, I finally did it
JSON:
{
"sender": "12321133",
"message": "hey",
"metadata": {"aaaa":"AAAAAAA", "bbbbb":"BBBBBB"}
}
It’s necessary to implement custom channel -> Custom Connectors
In RestInput class create method _extract_metadata
def _extract_metadata(self, req: Request) -> Text:
return req.json.get("metadata") or self.name()
Extract metadata
in receive
method
@custom_webhook.route("/webhook", methods=["POST"])
async def receive(request: Request):
sender_id = await self._extract_sender(request)
text = self._extract_message(request)
metadata = self._extract_metadata(request)
metadata = "{\"metadata\": \"" + str(metadata) + "\"}"
metadata = json.loads(metadata)
Few lines below pass extracted metadata into UserMessage constructor
try:
await on_new_message(
UserMessage(
text, collector, sender_id, input_channel=input_channel, metadata=metadata
)
)
Then you may extract metadata from last user message in custom action like this (not a perfect code but it works)
events = tracker.current_state()['events']
user_events = []
for e in events:
if e['event'] == 'user':
user_events.append(e)
print(user_events[-1]['metadata'])
Action endpoint server output:
{'metadata': "{'aaaa': 'AAAAAAA', 'bbbbb': 'BBBBBB'}"}
127.0.0.1 - - [2019-09-02 13:42:41] "POST /webhook HTTP/1.1" 200 169 0.003994