我在AWS lambda中调用API时包含的代码如下所示。 urlilb3 python库成功上传为zip文件夹。但是当我尝试访问它显示的特定意图时
当我在AWS lambda(python 3.6)中包含API调用时,我得到了
“无法调用远程端点,或者它返回的响应无效”。
为什么会这样?在python 3.6中包含API调用之前要做的先决条件是什么。我使用了urllib3 python库并上传为zip文件夹。是否需要做其他事情?
def get_weather(session):
should_end_session = False
speech_output = " "
reprompt_text = ""
api = "some url ...."
http = urllib3.PoolManager()
response = http.request('GET',api)
weather_status = json.loads(response.data.decode('utf-8'))
for weather in weather_status:
final_weather = weather["WeatherText"]
return build_response(session_attributes, build_speechlet_response(speech_output, reprompt_text, should_end_session))
答案 0 :(得分:0)
尝试打印response.data,以便在日志中看到它。这可能会给你一个线索。我也会尝试切换到Python请求而不是URLLib3。您可能还需要根据要调用的API的实现来设置内容类型。
答案 1 :(得分:0)
from __future__ import print_function
import json
from botocore.vendored import requests
def lambda_handler(event, context):
print('received request: ' + str(event))
doctor_intent = event['currentIntent']['slots']['doctor']
email_intent = event['currentIntent']['slots']['email']
print(doctor_intent, email_intent)
print(type(doctor_intent), type(email_intent))
utf8string = doctor_intent.encode("utf-8")
utf8string1 = email_intent.encode("utf-8")
print(type(utf8string))
print(type(utf8string1))
car1 = {"business_name": utf8string , "customer_email": utf8string1 }
r = requests.post('https://postgresheroku.herokuapp.com/update',
json=car1)
#print ("JSON : ", r.json())
print(r.json())
data = str(r.json())
print(type(data))
return {
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": "Thank you for booking appointment with {doctor}
{response}".format(doctor=doctor_intent,response=data)
}
}
}
答案 2 :(得分:-1)
场景:使用第三方API获取天气
import urllib3
def get_weather():
api = "some url ...."
http = urllib3.PoolManager()
response = http.request('GET',api)
weather_status = json.loads(response.data.decode('utf-8'))
for weather in weather_status:
final_weather = weather["WeatherText"] ## The attribute "WeatherText" will varies depending upon the weather API you are using.
return final_weather
get_weather() # simple function call