我刚刚开始学习Airflow,我正在尝试创建一个小气流脚本来发送通知,但不知何故它无法调用Slack API。第一项任务很好。这是我使用的代码:
from airflow import DAG
from airflow.contrib.operators.bigquery_check_operator import BigQueryCheckOperator
from airflow.operators import BashOperator
from slackclient import SlackClient
from airflow.operators.slack_operator import SlackAPIPostOperator
from datetime import datetime, timedelta
default_args = {
'owner': 'test',
'depends_on_past': False,
'start_date': datetime.today(),
'email': ['test@test'],
'email_on_failure': True,
'email_on_retry': False,
'retries': 4,
'retry_delay': timedelta(minutes=5),
}
# Create the DAG
dag = DAG('slack_test',\
default_args=default_args,\
schedule_interval='15 * * * *')
final_check = BigQueryCheckOperator(
task_id='bq_check_agg',
sql='''
#legacy sql
SELECT
max(date) as max_date
FROM
[test:test.test]
WHERE date <= current_timestamp()
''',
dag = dag)
# slack notification
slack_notify = SlackAPIPostOperator(
task_id='slack_notify',
username = 'Airflow',
token='....',
channel='#test-channel',
text='ETL DONE!',
dag=dag
)
slack_notify.set_upstream(final_check)
当我尝试测试slack_notify
任务时,它失败了。这是我收到的错误:
airflow.exceptions.AirflowException: Slack API call failed (%s)
无法在线找到任何解决方案。松弛认证有问题吗?
答案 0 :(得分:0)
解决。我试图在私人闲聊频道发帖。与公众合作
答案 1 :(得分:0)
我认为您可以先邀请您的Airflow机器人进入您的私人频道,然后您的Airflow机器人可以在该频道中发布消息。否则,Slackbot无法找到私有频道,它将弹出Slack API错误not_in_channel
。
使用公共备用频道,您无需这样做,您将收到来自Airflow机器人的消息。
希望有帮助。