插件说明:

1、内网环境使用插件发布职位,提取简历,需要放开地址:https://ivvi-test.hcmcloud.iohttps://ivai.hcmcloud.io/

2、提取简历需要确认recruit.resume.upload这个api未做限制

3、私有云环境使用自动收集简历功能前,请登记Jira 。jira分配后联系对应开发配置时请提供环境域名和token,及远程链接。

token获取方式请参考:在系统设置,集成管理–访问令牌管理中新增后,将生成的token提供给开发

注意:生成的token要长期有效,否则失效后会导致相关功能不可用

4、职位中心列表界面,上传简历时,因需要调用第三方的服务,私有云内网环境,请开通对应的访问的地址api.xiaoxizn.com,端口443

针对智联现在展示的虚拟手机号问题。版本确认后,系统中简历详情页简历基本信息释放字段virtual_mobile做展示

目前可支持发布网站:

前程无忧 智联 拉勾 猎聘 boss直聘

目前已有功能:

  1. 职位填充(职位发布页面在发布前请鼠标点击确认一遍,防止填充错误
  2. 简历同步(可获取到 前程无忧智联招聘的简历 的附件)
  3. 手机号获取

1.插件下载及安装

步骤一:点击【系统设置】-【应用开通菜单】启用招聘云服务里的”招聘插件“功能菜单。

步骤二:点击【招聘云】-【招聘插件】,进入新版一键发布插件下载及安装操作指引。

步骤三:在操作指引里选择相应的浏览器,点击下方的下载地址即可完成插件的下载及安装。

    

插件安装成功后,在浏览器右上角会出现一个蓝色小图标,如下图所示。

当浏览器插件版本非最新版本时,系统插件会自动提示,可直接点击插件下载最新的安装包进行安装

2.职位发布(以智联招聘为例)

步骤一:在职位中心发布一个社会招聘职位,勾选已发布的职位,点击【更多操作】-【编辑】,进入到职位详情页面。

步骤二:进入职位详情页面后,点击右上角蓝色插件小图标,弹出插件登录界面,填写好相关信息点击登录即可(注意地址中最后不要加/)。

步骤三:登录成功后,在职位详情页界面打开招聘小助手,会出现第三方招聘网站的发布渠道界面,点击其中一个发布渠道,会跳转到第三方招聘网站的登录界面。

如果点击【批量发送到以上网站】则同时打开以上5家第三方网站,然后分别填充职位

步骤四:登录到第三方网站后,会跳转到职位信息填写界面,点击右上角蓝色图标,在弹出的招聘助手框中点击”自动填充职位信息“,插件会自动将系统中已有的职位信息填写到相应位置,对于某些空缺或者需要修改的信息需要进行手动调整。

其中智联网站的薪酬信息,根据HCM中职位中的最低薪资和最高薪资,根据智联对应数据进行填充,如不匹配则不填充,需要HR进行补充

举例:HCM中最低薪资为8000,填充到智联网站为8千;如HCM中最低薪资为8500,匹配智联没有对应数值,则填充到智联网站为空,需要HR补充

步骤五:职位信息完善以后,点击该页面右下角”下一步“按钮,即可将该职位成功发布到第三方网站。

注意(很重要):

很多网站目前已经取消了职位上的简历接收邮箱,因此,当使用一键发布自动收集简历的时候,在第三方账号中有个简历接收邮箱,需要维护成HCM系统中职位的邮箱(任意职位的邮箱即可),并确认勾选了简历同步到此邮箱(有的网站在账号设置中,有的网站在职位发布界面,请查看具体网站)

一键发布后职位名称后面自动带的职位标识,举例:职位名称_1234,后面的数字不要去掉,否则系统无法自动分拣简历到对应职位


关于一键发布职位标识:职位模型中增加了字段【职位标识】,项目可维护自己业务上的编码含义,注意不要带特殊字符,如#*?.?()_+()-【】[\]等,此标识我们会在一键发布的时候自动拼接到第三方网站的职位名称上,当此字段不维护的时候,默认为职位的ID

智联网站特别说明:

智联网站上有个发送到我的同事的设置,之前标准功能会默认一键发布会将此处的信息自动填充为职位负责人及对应的职位邮箱,此逻辑现已取消,取代的是自动勾选同步到我的邮箱,需要客户的账号中维护简历接收邮箱为任意一个HCM系统职位的邮箱

注意:

智联会同时给该职位上的同事和我的邮箱发送邮件,为了防止一份简历重复解析,只保留一个即可,即使用同事邮箱也可以,使用发送到我的邮箱也可以,但是只能选择使用一个方式,否则简历会被重复解析

前程无忧网站特别说明:

前程无忧目前是唯一一个网站支持一个职位一个邮箱的模式,因此此网站不需要在职位后面加职位标识,不同的职位可以通过此邮箱来识别区分

前程无忧网站发布职位有延迟,发布后大约2小时职位才会在网站被应聘者看到,投递简历也有延迟,如发现主动投递简历后简历还没进系统,请不要着急,等待一段时间就可以了

猎聘网站特别说明:

猎聘目前对于普通账号和企业版账号,职位的邮箱设置不同

企业版支持一个职位单独设置接受邮箱

普通账号只能使用账号维护的邮箱接受简历

普通账号:

企业版账号:

目前发布职位为了兼容普通账号,默认会在职位后增加职位标识区分,如企业账号不想要此标识,可发布职位时删除,但是不擅长带着也不影响

对于普通账号:猎聘网站在维护账号的接收邮箱后,一定要打开接收简历提醒,否则网站不给邮箱中推送简历

3.简历提取(以智联招聘为例)

在智联招聘界面,点击任一简历,进入简历详情页面,点击右上角蓝色插件,在弹出的招聘助手方框中选择相应的职位和节点,然后点击”导入招聘系统“即可。


4.简历联系方式获取(以猎聘招聘为例)

猎聘渠道通过邮件解析的简历,原始简历中中联系方式被隐藏。如图所示

此时使用插件获取联系方式如下:

1、要求插件已经下载安装,并且已经点击插件正常登录之后才可进行第二步

2、简历中心详情页更多操作中,点击获取联系方式按钮,则会自动打开该简历所在网站

3、在第三方网站中同主动投递简历的应聘者进行沟通,第三方网站会将此应聘者的联系方式显示出来,然后插件会自动获取该联系方式

5.招聘插件常见问题整理

1、通信错误-----------刷新界面,如果还有问题,注销,重新登录,保持和当前系统登录账号一致。

2、关于各网站联系方式获取

智联招聘:主动投递的简历联系方式隐藏,同应聘者沟通后显示联系方式,如企业是智联的VIP账号,此时简历显示的是应聘者的真实手机号,如企业是智联的普通用户,则简历上显示的是虚拟电话,此虚拟电话有效期7天

如是HR从智联招聘手动搜索的简历,联系方式不显示,如要联系此应聘者目前智联需要HR付费获取,获取后是虚拟电话

猎聘网站:主动投递的简历联系方式隐藏,同应聘者沟通后显示联系方式,如是HR从智联招聘手动搜索的简历,联系方式不显示,如要联系此应聘者目前智联需要HR付费获取,获取后是虚拟电话

3、招聘网站中如历史的职位也想同步简历到HCM系统中

可在第三方网站简历接收邮箱中将职位对应的邮箱维护上

将下图位置的邮箱维护到第三方网站

6、关于第三方网站绑定HCM系统中邮箱获取验证码操作

1)下载最新版本的招聘浏览器插件

2)客户第三方账号中将简历接收邮箱设置为系统中职位中心任意职位的职位邮箱

3)绑定系统中职位邮箱时,会需要邮箱验证码,此验证码可登录链接https://ivvi-test.hcmcloud.io/checkCodeMain.html自助搜索

4)一键发布职位时小助手自动在职位名称中增加职位ID,用于区分不同职位接受的简历,以便简历解析同步系统

5)绑定邮箱查询验证码时,打开查询地址后,输入绑定的邮箱(已在boss网站中操作绑定邮箱并发送了验证码)

点击查询后,可在返回的结果中获取验证码。


注意:私有云环境使用自动收集简历功能前,待Jira分配后,请联系jira经办人做后台配置。

联系开发配置时请提供环境域名和token,及远程链接


附各第三方网站相关规则:

7、非插件方式对接前程无忧的职位发布和简历收取(仅定制化前程无忧账号可使用,此方法已废弃,不再扩展新的需求,新项目请使用4.6第三方招聘网站对接

7.1.1维护前程无忧账户

标准产品在对象管理器中预制【Rec51JobAccount】和【Rec51JobRelation】模型:

在【Rec51JobAccount】中维护前程无忧的账号密码等相关信息,若需要可自定义发布功能,点击新增界面显示如下:

  • 账户名称:前程无忧登录界面的【会员名】
  • 账号ID:前程无忧登录界面的【用户名】
  • 账号密码:前程无忧登录界面的【密码】
  • key:需要联系前程无忧方提供对应key

前程无忧登录界面如下:

【Rec51JobRelation】表中记录系统职位id与前程无忧职位id关系,系统自动回写无需维护

7.1.2职位发布和编辑及下线按钮的修改

元数据配置自动同步职位到前程无忧,修改职位发布按钮(注意:要发布的职位不能是要审批的职位

在【职位中心】功能中,需要将info层发布按钮及list层发布按钮替换成如下模式:

info层发布按钮修改:

需要将action中的"key": "not_need_approve"中增加以下两个按钮:

{

     "action": "CALL_API",

     "key": "publish_to_third",

     "entry_condition": "expression[GET(RES('create'),['success'])]",

     "options": {

       "api": "rec.third.common.publish.job",

         "params": {

                   "job_info": "expression[GET(RES('create'),['data'])]",

                   "type_list": ["51Job"],

                   "params": {

                     "type_": "PUBLISH"

                       }

                 }

              }

},

{
   "action": "CALL_API",
   "key": "edit_to_third",
   "entry_condition": "expression[GET(RES('edit'),['success'])]",
   "options": {
   "api": "rec.third.common.edit.job",
   "params": {
             "job_info": "expression[GET(RES('edit'),['data'])]",
             "type_list": ["51Job"]
            }
           }
},

list界面职位发布按钮的修改:

修改按钮 "key": "not_need_approve"中的release_job按钮,增加"handle_third_job": true

{
   "key": "release_job",
   "action": "CALL_API",
   "options": {
              "api": "recruit.batch.release.job",
              "params": {
               "params": "expression[SELECT_ITEMS()]",
               "info": {
                       "status": "1",
                       "delivery": 1},
               "handle_third_job": true
                                }
                            }
                        }

list界面职位下线按钮的修改,hcm系统中的职位同步下线到前程无忧:

修改按钮 "key": "offline_job"

{
            "key": "offline_job",
            "action": "CUSTOM_ACTION",
            "label": "下线",
            "left": false,
            "is_important": true,
            "confirm": true,
            "options": {
                "valid": true,
                "close_on_success": true,
                "result": true,
                "result_tip": true
            },
            "api": "recruit.release.job.new.batch.edit",
            "params": "=function(data,alter){var id_list=data.jobs.map(item =>item.id), offline =$filter('dateFormat')(new Date(), 'yyyy-MM-dd hh:mm:ss');return {'id_list':id_list,'info':{'status':'2','delivery':data.delivery,'offline_date': offline}, 'handle_third_job': true}}"
        }

7.1.3简历收集

1.可通过【系统设置】-【定期任务管理】中设置定时任务执行,需要控制24小时执行一次,代码写死取当前时间前24小时的简历

任务组件:apps.recruit.services_tasks.auto_apply_job_by_51Job

组件参数:

{

    "company_id":xxxxx

}

也可自己写云函数调用标准产品api定期执行:

8第三方招聘网站对接

8.1.1 新增弹性模型

找到【系统设置】-【对象管理器】新增弹性模型,点击新增显示如下:

  • 类型:第三方招聘网站对接弹性模型
  • 对象key:recruit_link_third_dynamic.xxxx(xxxx需要自定义,用于区分不同的对接网站)

一个招聘网站对应一个弹性模型

新增完成后,点击新增的弹性模型找到list场景进入点击测试,可新增第三方网站账户,若项目需要,可自定义发布成应用

进入点新增,界面显示如下:

  • 网站名称:取刚才新建弹性模型recruit_link_third_dynamic.xxxx去掉recruit_link_third_dynamic.部分,也就是xxxx,此处必须保持一致
  • 账号ID因第三方网站的不同,若第三方网站同时存在网站账号名和账号ID,则【账户名】和【账号ID】均需要维护,否则就维护第三方网站登录时有的字段
  • 网站账号名:第三方登录的网站账号名
  • 账号密码:第三方网站登录界面的【密码】
  • key第三方网站提供的key
  • token第三方网站提供的token

在对象管理器中找到新建的弹性模型-字段信息-元数据编辑

点击进入,action中会展示需要调用的云函数名称,创建完云函数时,需要将对应的云函数名称替换到对应位置的name,下文会在api中会详解各个API调用云函数的逻辑:

标准预制action

{
    "action": [{
        "key": "dynamic_get_token",
        "name": "用于获取第三方网站token的云函数名称",
        "action_type": "open_api",
        "description": "获取第三方网站token",
        "check_role": true,
        "param": []
    }, {
        "key": "dynamic_encrypt",
        "name": "用于处理数据加密的云函数名称",
        "action_type": "open_api",
        "description": "处理数据加密",
        "check_role": true,
        "param": []
    }, {
        "key": "dynamic_decrypt",
        "name": "用于处理数据解密的云函数名称",
        "action_type": "open_api",
        "description": "处理数据解密",
        "check_role": true,
        "param": []
    }, {
        "key": "dynamic_handel_headers",
        "name": "用于处理请求头及其他可能需要处理的参数的云函数名称",
        "action_type": "open_api",
        "description": "处理请求头及其他可能需要处理的参数",
        "check_role": true,
        "param": []
    }, {
        "key": "handel_get_field_dict_request_param",
        "name": "用于处理第三方网站某一字段字典项请求参数的云函数名称",
        "action_type": "open_api",
        "description": "处理第三方网站某一字段字典项请求参数",
        "check_role": true,
        "param": []
    }, {
        "key": "get_third_field_dict",
        "name": "发起请求的云函数名称",
        "action_type": "open_api",
        "description": "发起请求,获取第三方网站某一字段字典项",
        "check_role": true,
        "param": []
    }, {
        "key": "handel_publish_third_job_info",
        "name": "用于处理第三方职位发布信息的云函数名称",
        "action_type": "open_api",
        "description": "HCM系统内的职位信息处理为适合第三方网站职位发布的信息",
        "check_role": true,
        "param": []
    }, {
        "key": "handel_publish_request_param",
        "name": "用于处理职位发布请求参数的云函数名称",
        "action_type": "open_api",
        "description": "处理职位发布请求参数",
        "check_role": true,
        "param": []
    }, {
        "key": "publish_third_job",
        "name": "发起请求的云函数名称",
        "action_type": "open_api",
        "description": "发起请求,发布职位到第三方网站",
        "check_role": true,
        "param": []
    }, {
        "key": "handel_edit_third_job_info",
        "name": "用于处理第三方职位编辑相关信息的云函数名称",
        "action_type": "open_api",
        "description": "HCM系统内的职位信息处理为适合第三方网站职位编辑相关的信息",
        "check_role": true,
        "param": []
    }, {
        "key": "handel_edit_request_param",
        "name": "用于处理第三方职位编辑请求参数的云函数名称",
        "action_type": "open_api",
        "description": "处理第三方职位编辑请求参数",
        "check_role": true,
        "param": []
    }, {
        "key": "edit_third_job",
        "name": "发起请求的云函数名称",
        "action_type": "open_api",
        "description": "发起请求,编辑第三方职位",
        "check_role": true,
        "param": []
    }, {
        "key": "handel_resume_list_request_param",
        "name": "用于处理获取第三方简历列表请求参数的云函数名称",
        "action_type": "open_api",
        "description": "处理获取第三方简历列表请求参数",
        "check_role": true,
        "param": []
    }, {
        "key": "get_third_resume_list",
        "name": "发起请求的云函数名称",
        "action_type": "open_api",
        "description": "发起请求,获取第三方简历列表",
        "check_role": true,
        "param": []
    }, {
        "key": "handel_resume_info_request_param",
        "name": "用于处理获取第三方简历详细信息请求参数的云函数名称",
        "action_type": "open_api",
        "description": "处理获取第三方简历详细信息请求参数",
        "check_role": true,
        "param": []
    }, {
        "key": "get_third_resume_info_list",
        "name": "发起请求的云函数名称",
        "action_type": "open_api",
        "description": "发起请求,获取第三方简历详细信息",
        "check_role": true,
        "param": []
    }, {
        "key": "handel_resume_info",
        "name": "用于处理第三方简历详细信息的云函数名称",
        "action_type": "open_api",
        "description": "处理第三方简历详细信息为HCM系统内的信息",
        "check_role": true,
        "param": []
    }, {
        "key": "handel_attachment_file_request_param",
        "name": "用于处理获取第三方简历附件请求参数的云函数名称",
        "action_type": "open_api",
        "description": "处理获取第三方简历附件请求参数",
        "check_role": true,
        "param": []
    }, {
        "key": "get_resume_attachment_file",
        "name": "发起请求的云函数名称",
        "action_type": "open_api",
        "description": "发起请求,获取第三方简历附件",
        "check_role": true,
        "param": []
    }]
}

RecruitLinkThirdJobData(职位关系对照表),用于关联系统职位与第三方网站职位关系,系统自动回写,无须维护

8.1.2 职位相关api


  • 发布职位API:rec.link.third.dynamic.common.publish.job
  • 编辑职位API:rec.link.third.dynamic.common.edit.job
  • 职位投递API:rec.link.third.dynamic.common.apply.job

发布职位API:rec.link.third.dynamic.common.publish.job

在职位发布界面职位的info增加元数据配置

增加的元数据内容

{
    "action": "CALL_API",
    "key": "publish_to_third",
    "entry_condition": "expression[GET(RES('create'),['success'])]",
    "options": {
        "api": "rec.link.third.dynamic.common.publish.job",
        "params": {
            "job_info": "expression[GET(RES('create'),['data'])]",
            "type_list": ["上文中新增的弹性模型名称,去掉recruit_link_third_dynamic. "
            ]
        }
    }
},

职位发布API调用弹性模型中的云函数的逻辑

1)会根据api中传入的模型名称自动获取账户信息;

2)根据传入的job_info进行职位信息组装,目的就是把HCM系统内部的转换成适用于第三方职位的信息,此过程通过调用action(key值为handel_publish_third_job_info)实现云函数处理,

action示例

{
    "key": "handel_publish_third_job_info",
    "name": "用于处理第三方职位发布信息的云函数名称,如:private. handel_publish_third_job_info ",
    "action_type": "open_api",
    "description": "HCM系统内的职位信息处理为适合第三方网站职位发布的信息",
    "check_role": True,
    "param": []
},

private. handel_publish_third_job_info就是项目自行定义的云函数,此云函数接收的参数为:{"user_info": user_info, "job_info": job_info},即账户信息和职位信息。云函数数据返回格式:

{"success":True, "data": "处理好的职位信息(dict类型)"}

 3)组装发布职位请求相关参数,此过程通过调用action(key值为handel_publish_request_param)实现云函数处理,

action示例

{
    "key": "handel_publish_request_param",
    "name": "用于处理职位发布请求参数的云函数名称,如private. handel_publish_request_param ",
    "action_type": "open_api",
    "description": "处理职位发布请求参数",
    "check_role": True,
    "param": []
},

private. handel_publish_request_param就是项目自行定义的云函数,此云函数接收的参数为:{"user_info": user_info, "job_info": job_info,"third_job_info": third_job_info},即账户信息、职位信息、第三方职位信息;

此云函数根据第三方网站要求组装请求相关的参数。云函数数据返回格式:

{"success":True, "data": "处理好的请求参数(dict类型)"}


【注1: 根据第三方网站发起请求的要求,凡是处理请求参数相关的,应该都有相同的模式,如:获取token、参数加密、参数解密等,action中定义了相关方法框架,需根据需要自行定义云函数。相关action如下:

{
    "key": "dynamic_get_token",
    "name": "
用于获取第三方网站token的云函数名称",
    "action_type": "open_api",
    "description": "
获取第三方网站token",
    "check_role": True,
    "param": []
},
{
    "key": "dynamic_encrypt",
    "name": "
用于处理数据加密的云函数名称",
    "action_type": "open_api",
    "description": "
处理数据加密",
    "check_role": True,
    "param": []
},
{
    "key": "dynamic_decrypt",
    "name": "
用于处理数据解密的云函数名称",
    "action_type": "open_api",
    "description": "
处理数据解密",
    "check_role": True,
    "param": []
},
{
    "key": "dynamic_handel_headers",
    "name": "
用于处理请求头及其他可能需要处理的参数的云函数名称",
    "action_type": "open_api",
    "description": "
处理请求头及其他可能需要处理的参数",
    "check_role": True,
    "param": []
},
这样处理的好处:因为功能操作的不同,在每次请求第三方网站时要处理的请求参数也就不同;但是其内在逻辑都是一样的,无非就是组装请求头,获取token,相关参数加密或者解密等。为了防止重复书写这些相同的代码逻辑,需要提前定义好这些公共方法,在使用时直接调用,这样才符合代码规范。

在获取token时应该要发起请求,具体方法参考【注2


4)发起请求(发布职位到第三方网站),此过程通过调用action(key值为publish_third_job)实现云函数处理

action示例

{
    "key": "publish_third_job",
    "name": "发起请求的云函数名称,如:private. publish_third_job",
    "action_type": "open_api",
    "description": "发起请求,发布职位到第三方网站",
    "check_role": True,
    "param": []
},

private. publish_third_job就是项目自行定义的云函数,此云函数接收的参数为:{"user_info": user_info, "job_info": job_info,"request_param": request_param,

"third_job_info": third_job_info},即账户信息、职位信息、请求参数、第三方职位信息;此云函数进行相关请求参数的组装与处理,调用api发起请求,发起请求的api如下:

CustomerUtil.call_open_api("hcm.model.action.params",

                      {"action": "dynamic_request",

                      "params": {

                               "url": url,

                               "headers": headers,

                               "params": params,

                               "method": method

                               },

                       "model": " recruit_link_third_dynamic.xxxx"})

其中,url为请求的url(字符串),headers为请求头(字典类型),params为请求参数(字典类型,相当于调用api需要的参数),method为请求方法(字符串,默认为POST,一般使用POST也有可能是GET);

云函数数据返回格式:

{"success":True, "data": "请求第三方网站返回的结果(dict类型)"}


【注2】:凡是发起请求相关的云函数,都需要调用发起请求的api,示例如下:

CustomerUtil.call_open_api("hcm.model.action.params",

                      {"action": "dynamic_request",

                      "params": {

                               "url": url,

                               "headers": headers,

                               "params": params,

                               "method": method

                               },

                       "model": " recruit_link_third_dynamic.xxxx"})

其中,url为请求的url(字符串),headers为请求头(字典类型),params为请求参数(字典类型,相当于调用api需要的参数),method为请求方法(字符串,默认为POST,一般使用POST也有可能是GET);

云函数数据返回格式:

{"success":True, "data": "请求第三方网站返回的结果(dict类型)"}


5)发布成功后,第三方网站会返回一个职位ID,这个ID需要在第四步中处理一下返回,示例{"success":True, "data": {"id":"第三方职位ID",……..}};拿到ID后会往RecruitLinkThirdJobData表中创建一条数据,此数据会存储HCM系统内的职位ID和第三方网站职位ID,这样就建立起了两个系统间职位的关联关系。

职位发布成功。

注释3

【注3: 在处理职位信息的时候(如:发布、编辑),可能会用到第三方职位信息中某一字段的字典项,需要请求获取字典项,此过程通过调用api实现,

调用示例:

CustomerUtil.call_open_api("hcm.model.action.params",

                      {"action": " get_field_dict_by_third",

                      "params": {

                               "third_type": third_type,

                                "field":field},

                       "model": " recruit_link_third_dynamic.xxxx"})

其中third_typerecruit_link_third_dynamic.xxxx去掉recruit_link_third_dynamic.的字符串,field为要获取的第三方网站字段key值(字符串)

 

api中会调用两个action中的云函数,需要自行定义(key值为handel_publish_request_param(处理请求参数)和get_third_field_dict(发起获取字典项的请求)action示例:

{
        "key": "handel_get_field_dict_request_param",
        "name": "
云函数名称,如:private. handel_get_field_dict_request_param",
        "action_type": "open_api",
        "description": "
处理第三方网站某一字段字典项请求参数",
        "check_role": True,
        "param": []
    },

private. handel_get_field_dict_request_param就是项目自行定义的云函数,此云函数接收的参数为:{"user_info": user_info, "key":key },即账户信息和第三方网站字段key

{
        "key": "get_third_field_dict",
        "name": "
云函数名称,如:private. get_third_field_dict",
        "action_type": "open_api",
        "description": "
发起请求,获取第三方网站某一字段字典项",
        "check_role": True,
        "param": []
    },

private. get_third_field_dict就是项目自行定义的云函数,此云函数接收的参数为:{"user_info": user_info, "key":key"request_param": request_param, },即账户信息、第三方网站字段key值、请求参数

建议项目上自行定义一个云函数,一次性把需要的字段全部取出来做成HCM系统内的代码项,以后直接从代码项取值,不用每次在使用的时候再发起请求取值了。


编辑职位API:rec.link.third.dynamic.common.edit.job

在职位界面编辑增加元数据配置

增加元数据配置

{
    "action": "CALL_API",
    "key": "edit_to_third",
    "entry_condition": "expression[GET(RES('create'),['success'])]",
    "options": {
        "api": "rec.link.third.dynamic.common.edit.job",
        "params": {
            "job_info": "expression[GET(RES('create'),['data'])]",
            "type_list": ["上文中新增的弹性模型名称,去掉recruit_link_third_dynamic. " ],
            "params": {} 此参数会传入api中,自行根据需要使用
        }
    }
},

职位编辑API调用弹性模型中的云函数的逻辑,此接口可处理第三方职位下线、信息修改等。

1)查职位关联关系,根据HCM系统内的职位id查,没有查到说明此职位没有在第三方网站中,不进行第三方网站职位的操作

注释4

【注4: rec.link.third.dynamic.common.edit.job还可传入一个参数params,此参数可以传入到对应的云函数中。

用途示例:

定义一个编辑类型如 “edit_type”: [“edit”, “offline”, “re_publish”, …..],分别代表编辑、职位下线、重新发布等;

以重新发布为例apiparams参数重传入{“params”: {“edit_type”: “re_publish”}},如果此职位没有在第三方网站中,标准产品会自动执行职位发布操作,仅re_publish这个值代码内做了特殊识别(用于发布没有在第三方网站中的职位发布到第三方网站),

云函数中拿到了edit_type这样特定的标识,就可以分类处理相关功能

2)会根据api中传入的模型名称自动获取账户信息;

3)根据传入的job_info进行职位信息组装,目的就是把HCM系统内部的转换成适用于第三方职位的信息,此过程通过调用action(key值为handel_edit_third_job_info)实现云函数处理

action示例

{
        "key": "handel_edit_third_job_info",
        "name": "云函数名称,如:private. handel_edit _third_job_info",
        "action_type": "open_api",
        "description": "HCM系统内的职位信息处理为适合第三方网站职位编辑相关的信息",
        "check_role": True,
        "param": []
    },
private. handel_edit _third_job_info就是项目自行定义的云函数,此云函数接收的参数为:{"user_info": user_info, "job_info": job_info, "params":params},即账户信息、职位信息、api传入的其他参数。云函数数据返回格式:

{"success":True, "data": "处理好的职位信息(dict类型)"}

 4)组装编辑职位请求相关参数,此过程通过调用action(key值为handel_edit_request_param)实现云函数处理

action示例

{
    "key": "handel_edit_request_param",
    "name": "云函数名称,如private. handel_edit_request_param",
    "action_type": "open_api",
    "description": "处理编辑职位请求参数",
    "check_role": True,
    "param": []
},

private. handel_edit_request_param就是项目自行定义的云函数,此云函数接收的参数为:{"user_info": user_info, "job_info": job_info,"third_job_info": third_job_info,"params":params },即账户信息、职位信息、第三方职位信息、api传入的其他参数;

此云函数根据第三方网站要求组装请求相关的参数。云函数数据返回格式:

{"success":True, "data": "处理好的请求参数(dict类型)"}

 5)发起请求(编辑第三方网站职位),此过程通过调用action(key值为edit_third_job)实现云函数处理

action示例

{
    "key": "edit_third_job",
    "name": "云函数名称,如:private. edit_third_job",
    "action_type": "open_api",
    "description": "发起请求,编辑第三方网站职位",
    "check_role": True,
    "param": []
},

private. edit_third_job就是项目自行定义的云函数,此云函数接收的参数为:{"user_info": user_info, "job_info": job_info,"request_param": request_param,

"third_job_info": third_job_info, "params":params },即账户信息、职位信息、请求参数、第三方职位信息、api传入的其他参数;此云函数进行相关请求参数的组装与处理,调用api发起请求,见【注2】。

修改第三方职位成功。


职位投递API:rec.link.third.dynamic.common apply.job

自定义一个定时任务云函数,建议在每天夜间定时拉取第三方网站简历,云函数里面调用link.third.dynamic.common apply.job接口,接口传参如下:

接口传参

{

"type_list": ["弹性模型名称,去掉recruit_link_third_dynamic. "],

“job_ids”: “可不传,不传就会遍历所有职位拉取简历,系统职位id”,

"params": {} 此参数会传入api中,自行根据需要使用,例如可以传入一些限制条件,比如取最近一天的简历,云函数拿到这个参数可自行处理

}

职位投递API调用弹性模型中的云函数的逻辑

1)获取第三方网站职位id;

2)会根据api中传入的模型名称自动获取账户信息;

3)获取简历列表,此过程包含两个步骤,需定义两个云函数(处理请求参数,发起请求获取第三方简历列表)

action示例:

{
        "key": "handel_resume_list_request_param",
        "name": "云函数名称",
        "action_type": "open_api",
        "description": "处理获取第三方简历列表请求参数",
        "check_role": True,
        "param": []
    },

此云函数用于处理请求参数,云函数接收的参数为:{"user_info": user_info, "job_id_dict": job_id_dict,"params": params},即账户信息、第三方职位对照关系、api传入的其他参数;

第三方职位对照关系数据结构为{“第三方职位ID”:” HCM系统职位ID”}

{"success":True, "data": "处理好的请求参数(dict类型)"}
    {
        "key": "get_third_resume_list",
        "name": "云函数名称",
        "action_type": "open_api",
        "description": "发起请求,获取第三方简历列表",
        "check_role": True,
        "param": []
    },

此云函数用于发起请求,获取第三方简历列表,云函数接收的参数为:{"user_info": user_info, "job_id_dict": job_id_dict,"params": params,"request_param": request_param},即账户信息、第三方职位对照关系、api传入的其他参数、请求参数;

{"success":True, "data": "第三方简历列表(应为list(dict)类型,列表字典嵌套)"}

4)获取简历详细信息,此过程包含两个步骤,需定义两个云函数(处理请求参数,发起请求获取第三方简历详细信息)

action示例:

{
        "key": "handel_resume_info_request_param",
        "name": "云函数名称",
        "action_type": "open_api",
        "description": "处理获取第三方简历详细信息请求参数",
        "check_role": True,
        "param": []
    },

此云函数用于处理请求参数,云函数接收的参数为:{"user_info": user_info, "job_id_dict": job_id_dict, "resume_list":resume_list, "params": params},即账户信息、第三方职位对照关系、第三方简历列表、api传入的其他参数;

{"success":True, "data": "处理好的请求参数(dict类型)"}
    {
        "key": "get_third_resume_info_list",
        "name": "云函数名称",
        "action_type": "open_api",
        "description": "发起请求,获取第三方简历详细信息",
        "check_role": True,
        "param": []
    },

此云函数用于发起请求,获取第三方简历详细信息,云函数接收的参数为:{"user_info": user_info, "job_id_dict": job_id_dict, "resume_list":resume_list, "params": params,"request_param": request_param},即账户信息、第三方职位对照关系、第三方简历列表、api传入的其他参数、请求参数;

{"success":True, "data": "第三方简历列表(应为list(dict)类型,列表字典嵌套)"};

需注意此云函数,需要根据job_id_dict在每个简历详细信息中插入一个{“job_id”: “HCM系统内的职位ID,用于简历投递”},需根据resume_list在每个简历详细信息中插入一个{"third_resume_id":"第三方网站简历ID"}

5)单个简历的信息拼装(对第四步的结果开始for循环,拼装简历信息并投递职位),目的是把第三方简历信息转化为适用于HCM系统内部的简历信息,需定义一个云函数

action示例:

{
        "key": "handel_resume_info",
        "name": "用于处理第三方简历详细信息的云函数名称",
        "action_type": "open_api",
        "description": "处理第三方简历详细信息为HCM系统内的信息",
        "check_role": True,
        "param": []
    },

此云函数用于简历详细信息拼装,云函数接收的参数为:{ "resume_info":resume_ info, "params": params },即第三方简历详细信息、api传入的其他参数;

{"success":True, "data": "拼装好的简历信息(dict类型)"};

具体组装格式见【附1

6)创建简历并投递(单个)

【注5】如果需要获取简历附件,可按照以下示例处理。

此过程包含两个步骤,需定义两个云函数(处理请求参数,发起请求获取第三方简历附件)

action示例:

 {
        "key": "handel_attachment_file_request_param",
        "name": "用于处理获取第三方简历附件请求参数的云函数名称",
        "action_type": "open_api",
        "description": "处理获取第三方简历附件请求参数",
        "check_role": True,
        "param": []
    },

此云函数用于处理请求参数,云函数接收的参数为:{"user_info": user_info, "resume_info":resume_ info, "params": params},即账户信息、第三方简历详细信息、api传入的其他参数;

{"success":True, "data": "处理好的请求参数(dict类型)"}
    {
        "key": "get_resume_attachment_file",
        "name": "发起请求的云函数名称",
        "action_type": "open_api",
        "description": "发起请求,获取第三方简历附件",
        "check_role": True,
        "param": []
    },

此云函数用于发起请求获取附件,云函数接收的参数为:{"user_info": user_info, "resume_info":resume_ info, "params": params,"request_param": request_param },即账户信息、第三方简历详细信息、api传入的其他参数、请求参数;

此云函数需要用到两个api用于保存附件到HCM系统,

第一个api用于保存简历头像

CustomerUtil.call_open_api("hcm.model.action.params",

                      {"action": "save_resume_photo",

                      "params": {

                               "file_body":file_body},

                       "model": " recruit_link_third_dynamic.xxxx"})

其中,file_body为请求得到的文件内容(可能为bytes类型);

第二个api用于保存简历附件

CustomerUtil.call_open_api("hcm.model.action.params",

                      {"action": "save_resume_file",

                      "params": {

                               "file_body":file_body,

"file_name":file_name,},

                       "model": " recruit_link_third_dynamic.xxxx"})

其中,file_body为请求得到的文件内容(可能为bytes类型),file_name为文件名称;

这两个api均返回保存后文件的index,需要把这个index存到简历信息的对应字段中。

 【附1】

# hcm简历示例如下
# 其余未列举字段可到简历模型上查找添加,字段是mask类型的传id,简历子集数据格式list(dict())
resume_info = {
    "third_resume_id": "第三方简历id",
    "apply_time": "投递时间",
    "name": "性别",
    "sex": "姓名",
    "birth": "出生日期",
    "university": "最高学历 传id 如本科传2",
    "last_school": "最近学历毕业院校",
    "desc": "自我描述",
    "work_time": "工作年限 传id 如应届生传0",
    "addr": "家庭住址",
    "phone": "手机号",
    "last_company": "最近公司",
    "email": "邮箱",
    "last_job": "最近职位",
    "birthplace": "籍贯",
    "id_number": "身份证号",
    "company_id": company_id,
    "in_city": "工作地",
    "account_place": "户籍所在地",
    "marital_status": "婚姻状况",
    "expected_city": "期望工作地",
    "expected_salary": "期望薪资",
    "work_property": "工作性质",
    "dream_position": "期望职位/职位类别",
    "current_state": "当前状态 1:在职不考虑新职位;2:在职观望;3:在职换工作;4:正在找工作或其他情况;5:离职",
    "fixed_age": "年龄",
    "height": "身高",
    "weight": "体重",
    "technical_position": "技术职务/职称",
    "nation": "民族",
    "political_status": "政治面貌",
    "blood_type": "血型",
    "attachments_pic_id": "头像附件index,可调用方法保存头像(有示例)",
    "attachment_id": "原始简历附件id,可调用方法保存(有示例)",
    # 教育经历子集
    "education_list": [
        {"background": "学历 如本科就传2",
         "major": "专业",
         "school": "学校",
         "begin_date": "开始时间 yy-mm",
         "end_date": "结束时间 yy-mm",
         "is_full_time": "是否全日制 1是0否"
         }
    ],
    # 工作经历子集
    "work_experience_list": [
        {
            "work_content": "工作内容",
            "job": "职位",
            "company": "公司名称",
            "begin_date": "开始时间 yy-mm",
            "end_date": "结束时间 yy-mm"
        }
    ],
    # 项目经历子集
    "project_experience_list": [
        {
            "my_duty": "我的职责",
            "project_name": "项目名称",
            "project_description": "项目奖描述",
            "begin_date": "开始时间 yy-mm",
            "end_date": "结束时间 yy-mm"
        }
    ],
    # 证书子集
    "cert_list": [
        {
            "cert_name": "证书名称",
            "cert_time": "获取证书时间 yy-mm"
        }
    ],
    # 获奖子集
    "prize_list": [
        {
            "prize_name": "获奖名称",
            "prize_time": "获奖时间 yy-mm"
        }
    ],
    # 培训经历子集
    "training_experience_list": [
        {
            "begin_date": "开始时间 yy-mm",
            "end_date": "结束时间 yy-mm",
            "training_organization_name": "培训机构名称",
            "training_content": "培训内容"
        }
    ],
    # 其他子集和自定义子集,格式:模型名 + 数据,附件子集格式如下
    "ResumeAttachment": [
        {
            "file_name": "文件名称",
            "file_id": "文件索引",
        }
    ]
}


8.1.3第三方增加拉取简历日志

新增模型:RecThirdApplyLog(拉取第三方网站简历投递日志记录)
用于记录从第三方网站拉取简历到HCM系统后,投递失败的数据
数据记录:{
 "company_id": 公司id,
 "third_type": 第三方网站类型,
 "third_resume_id": 第三方网站简历id,
 "third_job_id": 第三方网站职位id,
 "job_id": 系统职位id,
  "resume_id": 系统简历id,
  "message": 投递失败信息,
  "failed_data_list": {"resume_info": {},
         "create_sub_failed_list": {}},
     "apply_status": 投递状态, 成功/失败
},
failed_data为json,resume_info为组装好的简历信息、create_sub_failed_list简历子集创建失败的信息

  • 无标签