Ich habe eine Test-App geschrieben in Ruby on Rails und sichtbar für eine ngrok IP. Ich habe einen Sandbox-Controller erstellt, mit dem ich den Status der Sandbox-Reise mit einem Klick ändern kann.Uber API Webhooks für requests.status_changed nicht feuernd, Webhooks für requests.receipt_ready sind
Bis heute (während einer Demo natürlich; es hatte 25 Minuten früher gearbeitet), wurden für jede Statusänderung Webhook-Ereignisse in meine ngrok-IP geschrieben, vom Typ requests.status_changed. Derzeit, wenn ich eine Verarbeitungsfahrt zu "Akzeptieren", "Ankommen" oder "In_Progress" ändere, bekomme ich die entsprechenden Antworten aus der Sandbox zurück, aber es werden keine Webhooks erstellt. Wenn ich die Fahrt zu "driver_canceled" oder "completed" ändere, bekomme ich ein requests.receipt_ready webhook Event.
Ich bin glücklich, Code zu erhalten, wenn das helfen wird (EDIT: I-Code unten bin zeigt), aber da a) Ich richtige Antworten zurück aus der Sandbox auf Statusänderung (wenn auch ohne Webhook post) zu erhalten, und b) ich Webhook Beiträge für den Eingang Benachrichtigung bekommen, nehme ich an, dass:
- ich in die Sandbox spräche richtig
- ich bin kein Netzwerk oder Firewall-Problem mit Verhinderung der Webhook vom Erreichen meines Server
Ich bin abhängig von den Status_changed Webhooks, um mir die Benachrichtigung zu geben, dass ich zusätzliche Maßnahmen ergreifen muss. Geht irgendetwas mit ihnen vor oder gibt es eine Reihe von Dingen, die ich untersuchen sollte, um festzustellen, warum diese fehlschlagen? Update:
Ich mache das in Rails. Ich benutze eine Klasse namens UberConnection zu verbinden, die im Grunde HTTParty ist:
class UberConnection
include HTTParty
base_uri 'https://sandbox-api.uber.com/v1.2'
headers "Accept-Language" => "en_US", "Content-Type" =>
"application/json"
debug_output $stdout
end
ich ngrok verwenden, um einen öffentlich sichtbaren Namen für die Webhook zu bekommen. Ich habe meinen Webhook so konfiguriert, dass er auf Ereignisse mit event_type = "requests.status_changed" wartet. Sie schaffen UberEvent Active Objekte und prüfen Sie nach Duplikaten oder Filterereignisse nicht die ACTIVE_EVENTS Liste übereinstimmt, gefunden
ACTIVE_EVENTS = ["requests.status_changed"]
if (!UberEvent.where(event_id: params["event_id"]).blank? || !ACTIVE_EVENTS.include?(params["event_type"]))
Rails.logger.debug("Ignoring duplicate or filtered notice")
return head :ok
end
ich auch eine Sandbox-Controller haben, die den Status einer Fahrt im Gange ändern, damit ich die Fahrt Lebenszyklus simulieren:
def ops_accepted
UberConnection.put("/sandbox/requests/#{params[:ride_id]}",
headers: {"Authorization" => "Bearer #{Uber.token}"},
body: {status: "accepted"}.to_json)
flash[:notice] = "Changed ride to Accepted"
redirect_to action: :operator
end
und ähnliche für die anderen Lebenszyklustypen.
Erwartetes Verhalten Sobald ich eine Fahrt planen und es ist in Verarbeitungszustand, sollte ich in der Lage sein, den Knopf zu drücken, die und haben die Fahrt geändert, um akzeptiert zu ops_accepted abfeuert. Dies sollte dazu führen, dass ein Webhook-Ereignis ausgelöst wird, das anzeigt, dass sich der Status geändert hat, und ich kann auf dieser Grundlage zusätzliche Aktionen ausführen.
tatsächliches Verhalten Alles aber das Webhook Ereignis ausgelöst wird.
eine neue Fahrt
Started GET "/sandbox" for 2600:1005:b06a:1a83:9818:4356:ceda:ca11 at 2017-07-26 08:35:46 -0400
Cannot render console from 2600:1005:b06a:1a83:9818:4356:ceda:ca11! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by WebhooksController#operator as HTML
Uber Load (0.1ms) SELECT "ubers".* FROM "ubers" ORDER BY "ubers"."id" ASC LIMIT ? [["LIMIT", 1]]
opening connection to sandbox-api.uber.com:443...
opened
starting SSL for sandbox-api.uber.com:443...
SSL established
<- "GET /v1.2/requests/current HTTP/1.1\r\nAccept-Language: en_US\r\nContent-Type: application/json\r\nAuthorization: Bearer [TOKEN REDACTED]\r\nConnection: close\r\nHost: sandbox-api.uber.com\r\n\r\n"
-> "HTTP/1.1 200 OK\r\n"
-> "Server: nginx\r\n"
-> "Date: Wed, 26 Jul 2017 12:35:45 GMT\r\n"
-> "Content-Type: application/json\r\n"
-> "Content-Length: 431\r\n"
-> "Connection: close\r\n"
-> "Content-Geo-System: wgs-84\r\n"
-> "Content-Language: en\r\n"
-> "Etag: W/\"e9fda87d668bbe0f46ec27d8557b110b03c8c422\"\r\n"
-> "X-Uber-App: uberex-sandbox\r\n"
-> "X-Uber-App: optimus\r\n"
-> "Strict-Transport-Security: max-age=604800\r\n"
-> "X-Content-Type-Options: nosniff\r\n"
-> "X-XSS-Protection: 1; mode=block\r\n"
-> "Strict-Transport-Security: max-age=2592000\r\n"
-> "X-Frame-Options: SAMEORIGIN\r\n"
-> "Cache-Control: max-age=0\r\n"
-> "\r\n"
reading 431 bytes...
-> "{\"status\":\"processing\",\"product_id\":\"6d898741-0175-4c71-ad5f-93fc66270d6a\",\"destination\":{\"latitude\":33.754177,\"longitude\":-84.371736},\"driver\":null,\"pickup\":{\"latitude\":33.7539854,\"region\":{\"latitude\":33.7489,\"country_name\":\"United States\",\"country_code\":\"US\",\"name\":\"Atlanta\",\"longitude\":-84.3881},\"eta\":6,\"longitude\":-84.3755874},\"request_id\":\"f14877e5-f060-4c4a-be91-bb66866238b9\",\"location\":null,\"vehicle\":null,\"shared\":false}"
read 431 bytes
Conn close
Rendering webhooks/operator.html.erb within layouts/application
Rendered webhooks/operator.html.erb within layouts/application (1.6ms)
Completed 200 OK in 795ms (Views: 27.9ms | ActiveRecord: 0.1ms)
Wechsel zu Akzeptiert abgefeuert
Started PUT "/webhooks/accept/f14877e5-f060-4c4a-be91-bb66866238b9" for 2600:1005:b06a:1a83:9818:4356:ceda:ca11 at 2017-07-26 08:48:22 -0400
Cannot render console from 2600:1005:b06a:1a83:9818:4356:ceda:ca11! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by WebhooksController#ops_accepted as HTML
Parameters: {"authenticity_token"=>"PIHCTPkaOpa8RrsvT4D+TF0PR1UvY8uukh9SC2MRw1o5StFZYo0PNtn1g0W6QQh/2f7/hQSDSVVy8CMLJv/GYg==", "ride_id"=>"f14877e5-f060-4c4a-be91-bb66866238b9"}
Uber Load (0.2ms) SELECT "ubers".* FROM "ubers" ORDER BY "ubers"."id" ASC LIMIT ? [["LIMIT", 1]]
opening connection to sandbox-api.uber.com:443...
opened
starting SSL for sandbox-api.uber.com:443...
SSL established
<- "PUT /v1.2/sandbox/requests/f14877e5-f060-4c4a-be91-bb66866238b9 HTTP/1.1\r\nAccept-Language: en_US\r\nContent-Type: application/json\r\nAuthorization: Bearer [TOKEN REDACTED]\r\nConnection: close\r\nHost: sandbox-api.uber.com\r\nContent-Length: 21\r\n\r\n"
<- "{\"status\":\"accepted\"}"
-> "HTTP/1.1 204 No Content\r\n"
-> "Server: nginx\r\n"
-> "Date: Wed, 26 Jul 2017 12:48:23 GMT\r\n"
-> "Content-Type: text/html; charset=UTF-8\r\n"
-> "Connection: close\r\n"
-> "Content-Language: en\r\n"
-> "X-Uber-App: uberex-sandbox\r\n"
-> "X-Uber-App: optimus\r\n"
-> "Strict-Transport-Security: max-age=604800\r\n"
-> "X-Content-Type-Options: nosniff\r\n"
-> "X-XSS-Protection: 1; mode=block\r\n"
-> "Strict-Transport-Security: max-age=2592000\r\n"
-> "X-Frame-Options: SAMEORIGIN\r\n"
-> "Cache-Control: max-age=0\r\n"
-> "\r\n"
Conn close
Redirected to http://edgexpress.ngrok.io/sandbox
Completed 302 Found in 1010ms (ActiveRecord: 0.2ms)
Started GET "/sandbox" for 2600:1005:b06a:1a83:9818:4356:ceda:ca11 at 2017-07-26 08:48:23 -0400
Cannot render console from 2600:1005:b06a:1a83:9818:4356:ceda:ca11! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by WebhooksController#operator as HTML
Uber Load (0.1ms) SELECT "ubers".* FROM "ubers" ORDER BY "ubers"."id" ASC LIMIT ? [["LIMIT", 1]]
opening connection to sandbox-api.uber.com:443...
opened
starting SSL for sandbox-api.uber.com:443...
SSL established
<- "GET /v1.2/requests/current HTTP/1.1\r\nAccept-Language: en_US\r\nContent-Type: application/json\r\nAuthorization: Bearer [TOKEN REDACTED]\r\nConnection: close\r\nHost: sandbox-api.uber.com\r\n\r\n"
-> "HTTP/1.1 200 OK\r\n"
-> "Server: nginx\r\n"
-> "Date: Wed, 26 Jul 2017 12:48:24 GMT\r\n"
-> "Content-Type: application/json\r\n"
-> "Content-Length: 804\r\n"
-> "Connection: close\r\n"
-> "Content-Geo-System: wgs-84\r\n"
-> "Content-Language: en\r\n"
-> "Etag: W/\"c1f9c6d51c7094d1e7789222a522aa1d3f304068\"\r\n"
-> "X-Uber-App: uberex-sandbox\r\n"
-> "X-Uber-App: optimus\r\n"
-> "Strict-Transport-Security: max-age=604800\r\n"
-> "X-Content-Type-Options: nosniff\r\n"
-> "X-XSS-Protection: 1; mode=block\r\n"
-> "Strict-Transport-Security: max-age=2592000\r\n"
-> "X-Frame-Options: SAMEORIGIN\r\n"
-> "Cache-Control: max-age=0\r\n"
-> "\r\n"
reading 804 bytes...
-> "{\"status\":\"accepted\",\"product_id\":\"6d898741-0175-4c71-ad5f-93fc66270d6a\",\"destination\":{\"latitude\":33.754177,\"eta\":2,\"longitude\":-84.371736},\"driver\":{\"phone_number\":\"(555)555-5555\",\"rating\":4.9,\"picture_url\":\"https:\\/\\/d1a3f4spazzrp4.cloudfront.net\\/uberex-sandbox\\/images\\/driver.jpg\",\"name\":\"John\",\"sms_number\":null},\"pickup\":{\"latitude\":33.7539854,\"region\":{\"latitude\":33.7489,\"country_name\":\"United States\",\"country_code\":\"US\",\"name\":\"Atlanta\",\"longitude\":-84.3881},\"eta\":1,\"longitude\":-84.3755874},\"request_id\":\"f14877e5-f060-4c4a-be91-bb66866238b9\",\"location\":{\"latitude\":33.7559,\"bearing\":-178,\"longitude\":-84.37212},\"vehicle\":{\"make\":\"Toyota\",\"picture_url\":\"https:\\/\\/d1a3f4spazzrp4.cloudfront.net\\/uberex-sandbox\\/images\\/prius.jpg\",\"model\":\"Prius\",\"license_plate\":\"UBER-PLATE\"},\"shared\":false}"
read 804 bytes
Conn close
Rendering webhooks/operator.html.erb within layouts/application
Rendered webhooks/operator.html.erb within layouts/application (1.8ms)
Completed 200 OK in 965ms (Views: 28.0ms | ActiveRecord: 0.1ms)
Wie Sie sehen können, keine Webhook Senden. Nun, schließen wir die Fahrt mit einem Fahrer abbrechen.
Treiber Abbrechen
Started PUT "/webhooks/cancel/f14877e5-f060-4c4a-be91-bb66866238b9" for 2600:1005:b06a:1a83:9818:4356:ceda:ca11 at 2017-07-26 08:51:08 -0400
Cannot render console from 2600:1005:b06a:1a83:9818:4356:ceda:ca11! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by WebhooksController#ops_cancelled as HTML
Parameters: {"authenticity_token"=>"[REDACTED]", "ride_id"=>"f14877e5-f060-4c4a-be91-bb66866238b9"}
Uber Load (0.1ms) SELECT "ubers".* FROM "ubers" ORDER BY "ubers"."id" ASC LIMIT ? [["LIMIT", 1]]
opening connection to sandbox-api.uber.com:443...
opened
starting SSL for sandbox-api.uber.com:443...
SSL established
<- "PUT /v1.2/sandbox/requests/f14877e5-f060-4c4a-be91-bb66866238b9 HTTP/1.1\r\nAccept-Language: en_US\r\nContent-Type: application/json\r\nAuthorization: Bearer [REDACTED]\r\nConnection: close\r\nHost: sandbox-api.uber.com\r\nContent-Length: 28\r\n\r\n"
<- "{\"status\":\"driver_canceled\"}"
-> "HTTP/1.1 204 No Content\r\n"
-> "Server: nginx\r\n"
-> "Date: Wed, 26 Jul 2017 12:51:08 GMT\r\n"
-> "Content-Type: text/html; charset=UTF-8\r\n"
-> "Connection: close\r\n"
-> "Content-Language: en\r\n"
-> "X-Uber-App: uberex-sandbox\r\n"
-> "X-Uber-App: optimus\r\n"
-> "Strict-Transport-Security: max-age=604800\r\n"
-> "X-Content-Type-Options: nosniff\r\n"
-> "X-XSS-Protection: 1; mode=block\r\n"
-> "Strict-Transport-Security: max-age=2592000\r\n"
-> "X-Frame-Options: SAMEORIGIN\r\n"
-> "Cache-Control: max-age=0\r\n"
-> "\r\n"
Conn close
Redirected to http://edgexpress.ngrok.io/sandbox
Completed 302 Found in 582ms (ActiveRecord: 0.1ms)
Started POST "/webhooks/event" for 104.36.193.85 at 2017-07-26 08:51:10 -0400
Cannot render console from 104.36.193.85! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by WebhooksController#event as */*
Parameters: {"event_id"=>"6b8e9684-c1c9-448b-92ef-54f9bbde53d0", "resource_href"=>"https://sandbox-api.uber.com/v1/requests/f14877e5-f060-4c4a-be91-bb66866238b9/receipt", "meta"=>{"status"=>"ready", "rider_id"=>"8Gb4HQ4kVZIq-Z6nR_kKYGBO_tjV1JqyU2VRJJdICrKLJDFVSv34MqsGfKZI0JO6d7-ELIws7Ia_YhwCmbvVHXRzwdIzEDOXs4aTrPRljXML10yOpwEKTn1sCyPlHmLT4g==", "user_id"=>"55d5e34c-1a9f-4dd8-87fe-1764678eea94", "resource_id"=>"f14877e5-f060-4c4a-be91-bb66866238b9"}, "event_type"=>"requests.receipt_ready", "event_time"=>1501073468, "webhook"=>{"event_id"=>"6b8e9684-c1c9-448b-92ef-54f9bbde53d0", "resource_href"=>"https://sandbox-api.uber.com/v1/requests/f14877e5-f060-4c4a-be91-bb66866238b9/receipt", "meta"=>{"status"=>"ready", "rider_id"=>"8Gb4HQ4kVZIq-Z6nR_kKYGBO_tjV1JqyU2VRJJdICrKLJDFVSv34MqsGfKZI0JO6d7-ELIws7Ia_YhwCmbvVHXRzwdIzEDOXs4aTrPRljXML10yOpwEKTn1sCyPlHmLT4g==", "user_id"=>"55d5e34c-1a9f-4dd8-87fe-1764678eea94", "resource_id"=>"f14877e5-f060-4c4a-be91-bb66866238b9"}, "event_type"=>"requests.receipt_ready", "event_time"=>1501073468}}
Comparing 6b8e9684-c1c9-448b-92ef-54f9bbde53d0 to what's in db. . .
UberEvent Load (3.4ms) SELECT "uber_events".* FROM "uber_events" WHERE "uber_events"."event_id" = ? [["event_id", "6b8e9684-c1c9-448b-92ef-54f9bbde53d0"]]
Ignoring duplicate or filtered notice
Completed 200 OK in 7ms (ActiveRecord: 3.6ms)
Wie Sie sehen können, die Webhook mit den Empfangsinformationen geschrieben, was bedeutet, dass es kein Block zwischen mir ist und das webhooks Plakat oder eine Fehlkonfiguration. Der Webhaken feuert einfach nicht für mich.
Was fehlt mir?
Hallo Sasa, ich sehe immer noch Probleme. Ich werde das Ticket mit mehr Details aktualisieren. – brokenbeatnik
Haben Sie immer noch ein Problem mit Webhooks? –
Ja, das ist immer noch kaputt. Ich habe die App auf einen Server in Google Cloud gestellt und die gleichen Ergebnisse erhalten. Das heißt, dass es nicht mein Computer oder meine Verwendung von Ngrok war, die das Problem verursacht haben. Ich erhalte einige der Webhooks (Quittungen), aber nicht die der Fahrt, das heißt, dass es nicht mein Webhook-Listener ist. Hast du etwas in der Sandbox geändert oder siehst du dort Probleme? Ich habe auch oben einen wesentlichen zusätzlichen Kontext bereitgestellt, um Fehler auf meiner Seite zu erklären und auszuschließen. – brokenbeatnik