Ошибка при создании тегов с помощью Gibbon (клиент Ruby MailChimp) - PullRequest
0 голосов
/ 06 июня 2019

У меня проблема при попытке создать теги / сегменты с помощью Gibbon, оболочки MailChimp для Ruby.

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

Я могу успешно добавлять теги к подписчику через Gibbon, но существует более 85 000 пользователей, которые должны быть переведены, и я действительно не хочу делать 85 000 индивидуальных запросов.Существует более 200 возможных тегов, поэтому я хотел найти всех пользователей для каждого возможного тега, а затем опубликовать адреса электронной почты в конечной точке сегмента ... так что 200 запросов, а не 85 000.

Проблема в том, что если в списке уже есть тег (т.е. созданный мной тестовый тег), я получаю 400 error, Tag already exists, а если тега не существует, я получаю 404 Resource Not Found.Это то же самое, если я предоставляю адреса электронной почты в пределах static_segment или нет.

Я ожидал бы, что следующее создаст тег в MailChimp:

request = Gibbon::Request.lists(<list_id>)
request.tags.create(body: { name: "testing3", static_segment: [] })

Тем не менее, я получаю следующую ошибку (то же самое, если я использую tags или segments взапрос):

I, [2019-06-06T10:33:59.711436 #88340]  INFO -- request: POST https://us15.api.mailchimp.com/3.0/lists/<list_id>/tags
D, [2019-06-06T10:33:59.711556 #88340] DEBUG -- request: User-Agent: "Faraday v0.15.4"
Authorization: "Basic <key>"
Content-Type: "application/json"
D, [2019-06-06T10:33:59.711605 #88340] DEBUG -- request: {"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"Resource Not Found","status":404,"detail":"Invalid path","instance":"<instance_id>"}
I, [2019-06-06T10:33:59.711779 #88340]  INFO -- response: Status 404
D, [2019-06-06T10:33:59.711839 #88340] DEBUG -- response: server: "openresty"
content-type: "application/problem+json; charset=utf-8"
x-request-id: "<instance_id>"
link: "<https://us15.api.mailchimp.com/schema/3.0/ProblemDetailDocument.json>; rel=\"describedBy\""
vary: "Accept-Encoding"
date: "Thu, 06 Jun 2019 09:33:59 GMT"
content-length: "204"
connection: "close"
set-cookie: "_AVESTA_ENVIRONMENT=prod; path=/, _mcid=1.b9640bf1122e4a9b277bb19e3d72caf6; expires=Fri, 05-Jun-2020 09:33:59 GMT; Max-Age=31536000; path=/; domain=.mailchimp.com"

D, [2019-06-06T10:33:59.711878 #88340] DEBUG -- response: {"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"Resource Not Found","status":404,"detail":"Invalid path","instance":"<instance_id>"}
Gibbon::MailChimpError: the server responded with status 404 @title="Resource Not Found", @detail="Invalid path", @body={:type=>"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/", :title=>"Resource Not Found", :status=>404, :detail=>"Invalid path", :instance=>"<instance_id>"}, @raw_body="{\"type\":\"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/\",\"title\":\"Resource Not Found\",\"status\":404,\"detail\":\"Invalid path\",\"instance\":\"<instance_id>\"}", @status_code=404
from /Users/Paul/.rvm/gems/<gemset>/gems/gibbon-3.2.0/lib/gibbon/api_request.rb:134:in `handle_error'
Caused by Faraday::ResourceNotFound: the server responded with status 404
from /Users/Paul/.rvm/gems/<gemset>/gems/faraday-0.15.4/lib/faraday/response/raise_error.rb:8:in `on_complete'

Я использую последнюю версию Gibbon 3.2.0.

Когда я перебрался внутрь Gibbon::APIRequest.post, чтобы увидеть генерируемый путьЯ вижу следующее:

 (byebug) base_api_url
 "https://us15.api.mailchimp.com/3.0/"

 # For request.segments
 (byebug) api_url
 "https://us15.api.mailchimp.com/3.0/lists/<list_id>/segments"

 # For request.tags
 (byebug) api_url
 "https://us15.api.mailchimp.com/3.0/lists/<list_id>/tags"

Любая помощь будет высоко ценится, так как я действительно не уверен, что я делаю неправильно.

Заранее спасибо.Павел.:)

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Так что для любого другого, кто может бороться с этим, документы Гиббона вообще не говорят о Сегментах, но делают ссылочные теги, из которых, как мне кажется, и исходят некоторые из моих недоразумений.

request.tags должно было быть request.segments.

Другая проблема заключается в том, что запрос не может быть повторно использован, так как я выполнял действие внутри цикла, назначив request1 = Gibbon::Request.lists(<list_id>) и пытаясь использовать его для второй итерации, Гиббон ​​перенаправил запрос в неправильный путь и возвратил ошибка 404.

Каждый запрос должен быть собственным экземпляром Gibbon Request Gibbon::Request. Таким образом, будет работать следующее:

request = Gibbon::Request
#loop start
request.lists(<list_id>).segments.create(body: { name: "testing", static_segment: [] })
# loop end

Надеюсь, это поможет кому-то еще.

1 голос
/ 06 июня 2019
Gibbon::Request.lists(LIST_ID).segments.create(body: { name: "NAME", static_segment: [] })
...