2017-07-20 3 views
0

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?

Antwort

0

Wir sehen derzeit keine Webhook-Probleme, wenn der Status der Reise in der Sandbox geändert wird. Ich habe mit meiner Testanwendung getestet und ich habe Webhooks für alle Statusänderungen erhalten, bei denen Webhook gefeuert werden soll. Überprüfen Sie Bildschirmdruck unten: enter image description here

+0

Hallo Sasa, ich sehe immer noch Probleme. Ich werde das Ticket mit mehr Details aktualisieren. – brokenbeatnik

+0

Haben Sie immer noch ein Problem mit Webhooks? –

+0

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