Как заставить Chatfuel читать файл JSON, хранящийся в Zapier?

В своем блоке Chatfuel я собираю {{user input}} и отправляю JSON в веб-перехватчик Zapier. Все идет нормально. После этого мой локальный Pyhon успешно читает этот JSON из хранилища Zapier.

url = 'https://store.zapier.com/api/records?secret=password'
response = urllib.request.urlopen(url).read().decode('utf-8')
data = json.loads(response)

и проанализируйте его, сгенерировав еще один JSON в качестве вывода:

json0={
 "messages": [
   {"text": analysis_output}]
 }

Затем Python3 отправляет этот JSON в веб-перехватчик GET в Zapier:

import requests
r = requests.post('https://hooks.zapier.com/hooks/catch/2843360/8sx1xl/', json=json0)
r.status_code

введите здесь описание изображения

введите здесь описание изображения

Zapier Webhook успешно получает JSON и отправляет его в хранилище.

введите здесь описание изображения

введите здесь описание изображения

Устанавливаются пары ключ-значение, а затем Chatfuel пытается прочитать из хранилища:

GET https://store.zapier.com/api/records?secret=password2

Но полученная структура JSON неверна, что было проверено с помощью этого кода:

url = 'https://store.zapier.com/api/records?secret=password2'
response = urllib.request.urlopen(url).read().decode('utf-8')
data = json.loads(response)
data

который возвращает:

{'messages': "text: Didn't know I could order several items"}

когда правильный для работы Chatfuel должен быть:

{'messages': [{"text: Didn't know I could order several items"}]}

То есть есть две основные проблемы:

1) В JSON отсутствует " { [ "

2) JSON добавляет новую информацию к существующей вместо создания нового JSON, из-за чего JSON состоит из 5 разных частей.

Я ищу возможные решения для этой проблемы.


person razimbres    schedule 09.01.2018    source источник
comment
Привет! Можете ли вы обновить свой вопрос, чтобы точно указать, как вы устанавливаете данные в хранилище? Кроме того, если вы сомневаетесь, установите значение ключа как полное json, а затем проанализируйте/выгрузите его по мере необходимости. Таким образом, Zapier никогда не будет вмешиваться в то, как хранятся ваши данные.   -  person xavdid    schedule 10.01.2018
comment
Вопрос обновлен xavdid   -  person razimbres    schedule 10.01.2018


Ответы (1)


Это Дэвид из команды Zapier Platform.

Во-первых, вам не нужны кавычки вокруг ваших ключей, мы позаботимся об этом за вас. В настоящее время ваш json будет выглядеть так:

{ "'messages'": { "'text'": "<DATA FROM STEP 1>" } }

Таким образом, первое изменение заключается в том, чтобы убрать их.

Далее, если вы хотите сохранить массив, используйте вместо этого действие Push Value Onto List. Он принимает ключ верхнего уровня и сохраняет ваши значения в ключе этого объекта с именем list. Учитывая следующую настройку:

Результирующая структура в JSON:

{ "demo": {"list": [ "5" ]} }

Похоже, вы хотите сохранить дополнительный уровень вниз; массив json-объектов:

[ { "text": "this is text" } ]

Это не поддерживается по умолчанию, так как все элементы списка хранятся в виде строк. Однако вы можете хранить строки json и анализировать их обратно в объект, когда вам нужно получить к ним доступ как к объекту!

Это отвечает на ваш вопрос?

person xavdid    schedule 10.01.2018