
monday.com 作为一个强大的工作管理平台,提供了丰富的 api 接口,允许开发者与平台进行编程交互。本教程将聚焦于一个常见的业务需求:通过 php 脚本,从外部系统(例如网站表单)接收数据,并将其作为新的线索或交易自动添加到 monday.com 的指定看板中。尽管问题中提到了 curl php,但本文将基于提供的解决方案,使用 php 内置的 file_get_contents 函数配合 stream_context_create 来发送 http 请求,这在很多场景下也是一个可行的选择。
在开始之前,您需要准备以下信息:
为了更好地组织配置信息,建议创建一个 config.php 文件来存储这些敏感数据和常用设置。
config.php 示例:
<?php
// monday.com API 令牌
$token = '[YOUR_MONDAY_API_KEY]'; // 请替换为您的实际 API 令牌
// monday.com GraphQL API 端点
$apiUrl = 'https://api.monday.com/v2';
// HTTP 请求头,包含内容类型和授权信息
$headers = [
'Content-Type: application/json',
'Authorization: ' . $token
];
// 存储您的看板 ID,可以根据需要添加更多
$boards = [
"testBoard" => 1234567890, // 替换为您的实际看板 ID
"boardName1" => 1918282734,
"boardName2" => 1987654321,
// ...更多看板
];
// 假设您可能还需要组 ID,尽管本教程主要关注看板中的项目创建
// "testGroup" => 6376637288 // 示例组 ID
?>注意事项:
立即学习“PHP免费学习笔记(深入)”;
monday.com API 主要基于 GraphQL。这意味着您需要构建一个 GraphQL 查询(Query)或突变(Mutation)来执行操作。创建新项目(线索或交易)属于突变操作。
要创建一个新项目,我们将使用 create_item 突变。它通常需要以下参数:
column_values 参数是一个 JSON 字符串,其内部结构取决于您要更新的列类型。以下是一些常见列类型的示例:
"status": {
"label": "New Lead" // 标签文本
}"date4": { // 这里的 "date4" 是列 ID
"date": "2023-10-27" // YYYY-MM-DD 格式
}"text__1": "John" // 这里的 "text__1" 是列 ID,直接传递字符串
"email__1": { // 这里的 "email__1" 是列 ID
"email": "john.doe@example.com",
"text": "john.doe@example.com" // 显示文本
}"phone__1": { // 这里的 "phone__1" 是列 ID
"phone": "+15551234567",
"countryShortName": "US" // 国家代码
}"long_text4__1": "这是一个详细的项目描述。" // 直接传递字符串
如何获取列 ID? 您可以通过 monday.com 的 API Playground (通常在 API 文档中提供) 或通过一个简单的 GraphQL 查询来获取看板的列 ID:
query {
boards(ids: [YOUR_BOARD_ID]) {
columns {
id
title
type
}
}
}接下来,我们将编写 PHP 脚本来接收表单数据,构建 GraphQL 突变,并发送请求。
<?php
include('config.php'); // 包含配置信息
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 1. 从表单获取输入值
$companyName = $_POST['companyName'] ?? '';
$firstName = $_POST['firstName'] ?? '';
$lastName = $_POST['lastName'] ?? '';
$contactEmail = $_POST['contactEmail'] ?? '';
$contactPhone = $_POST['contactPhone'] ?? '';
$projectState = $_POST['projectState'] ?? '';
$contactWebSite = $_POST['contactWebSite'] ?? ''; // 尽管链接列在原始问题中未成功,我们仍可以尝试传递
$projectMessage = $_POST['projectMessage'] ?? '';
// 2. 选择目标看板 ID
// 假设我们想将线索添加到 config.php 中定义的 'testBoard'
$boardId = $boards['testBoard'];
// 3. 获取当前日期,用于日期列
$todaysDate = date("Y-m-d");
// 4. 构建 column_values JSON 字符串
// 请确保这里的键(如 'status', 'date4', 'text__1' 等)与您 monday.com 看板中的实际列 ID 匹配
$columnValsArray = [
'status' => [
'label' => 'New Lead' // 设置状态为“新线索”
],
'date4' => [ // 假设这是您的日期列 ID
'date' => $todaysDate
],
'text__1' => $firstName, // 假设这是您的名字文本列 ID
'text5__1' => $lastName, // 假设这是您的姓氏文本列 ID
'email__1' => [ // 假设这是您的邮箱列 ID
'email' => $contactEmail,
'text' => $contactEmail
],
'phone__1' => [ // 假设这是您的电话列 ID
'phone' => $contactPhone,
'countryShortName' => 'US' // 根据需要调整国家代码
],
'text7__1' => $projectState, // 假设这是您的项目状态文本列 ID
'long_text4__1' => $projectMessage // 假设这是您的长文本消息列 ID
// 'link__1' => [ // 链接列在原始问题中未成功,但结构通常如下
// 'url' => $contactWebSite,
// 'text' => $contactWebSite
// ]
];
// 将 PHP 数组编码为 JSON 字符串,作为 column_values 参数
$columnValsJson = json_encode($columnValsArray);
// 5. 构建 GraphQL 突变查询
// 注意:这里的 $itemName 和 $columnVals 是 GraphQL 变量,不是 PHP 变量
$query = 'mutation ($itemName: String!, $columnVals: JSON!) {
create_item (
board_id:' . $boardId . ',
item_name:$itemName,
column_values:$columnVals
) {
id
name
column_values {
id
value
text
}
}
}';
// 6. 定义 GraphQL 变量
$vars = [
'itemName' => $companyName, // 新项目的名称
'columnVals' => $columnValsJson // 包含所有列值的 JSON 字符串
];
// 7. 准备 HTTP 请求内容
$requestContent = json_encode([
'query' => $query,
'variables' => $vars
]);
// 8. 使用 stream_context_create 和 file_get_contents 发送 POST 请求
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => $headers, // 从 config.php 获取的请求头
'content' => $requestContent,
'ignore_errors' => true // 允许获取错误响应体
]
]);
$data = @file_get_contents($apiUrl, false, $context);
// 9. 处理 API 响应
$responseContent = json_decode($data, true);
// 输出响应,用于调试或进一步处理
header('Content-Type: application/json');
echo json_encode($responseContent, JSON_PRETTY_PRINT);
} else {
// 如果不是 POST 请求,可以显示一个简单的表单或者错误信息
echo "请通过 POST 请求提交数据。";
// 示例 HTML 表单 (仅用于测试目的)
/*
echo '<form method="POST">
<input type="text" name="companyName" placeholder="公司名称" required><br>
<input type="text" name="firstName" placeholder="名"><br>
<input type="text" name="lastName" placeholder="姓"><br>
<email type="email" name="contactEmail" placeholder="邮箱"><br>
<input type="tel" name="contactPhone" placeholder="电话"><br>
<input type="text" name="projectState" placeholder="项目状态"><br>
<input type="url" name="contactWebSite" placeholder="公司网址"><br>
<textarea name="projectMessage" placeholder="项目消息"></textarea><br>
<button type="submit">创建线索</button>
</form>';
*/
}
?>安全性:API 令牌管理
错误处理
列 ID 的准确性
链接列 (Link Column)
file_get_contents 与 cURL 扩展
// ... 配置 $token, $apiUrl, $headers, $requestContent ... $ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $requestContent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $data = curl_exec($ch); $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); // ... 处理 $data 和 $http_status ...
异步处理
通过本教程,您应该已经掌握了如何使用 PHP 脚本与 monday.com 的 GraphQL API 进行交互,以自动化创建新的线索或交易。关键在于正确配置 API 令牌、构建符合 GraphQL 规范的突变查询,以及根据 monday.com 列类型正确格式化 column_values 参数。通过这些基础知识,您可以进一步扩展功能,实现更复杂的 monday.com 自动化集成,提升工作效率。
以上就是使用 PHP 与 monday.com API 交互:自动化创建线索与交易的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号